#ifndef LEVEL_H
#define LEVEL_H

#include <vector>

#include "boost/shared_ptr.hpp"

#include "Enemy.h"
#include "Pickup.h"
#include "Projectile.h"

class Level
{
public:
    Level();

    std::vector<ProjectilePtr>& getProjectiles();
    void addProjectile(ProjectilePtr projectile);

    std::vector<PickupPtr>& getPickups();
    void addPickup(PickupPtr pickup);

    std::vector<EnemyPtr>& getEnemies();
    void addEnemy(EnemyPtr enemy);

    void update(float delta);
    void render(sf::RenderWindow& renderer);
private:
    typedef std::vector<ProjectilePtr> projectile_vec;
    typedef projectile_vec::iterator projectile_it;
    projectile_vec projectiles;

    typedef std::vector<PickupPtr> pickup_vec;
    typedef pickup_vec::iterator pickup_it;
    pickup_vec pickups;

    typedef std::vector<EnemyPtr> enemy_vec;
    typedef enemy_vec::iterator enemy_it;
    enemy_vec enemies;
};

typedef boost::shared_ptr<Level> LevelPtr;

#endif